malloc()
, calloc()
, realloc()
এর মাধ্যমে মেমোরি বরাদ্দ করাসি প্রোগ্রামিং ভাষায় ডাইনামিক মেমোরি ম্যানেজমেন্ট পরিচালনা করতে malloc()
, calloc()
, এবং realloc()
ফাংশনগুলো ব্যবহার করা হয়। এই ফাংশনগুলো স্ট্যাটিক বা লকল মেমোরির পরিবর্তে রানটাইমে মেমোরি বরাদ্দ করার জন্য ব্যবহৃত হয়। ডাইনামিক মেমোরি বরাদ্দ করার ফলে প্রোগ্রামটি বেশি ফ্লেক্সিবল হয়, কারণ প্রোগ্রাম চলাকালীন সময়ে মেমোরি প্রয়োজনীয়তা পরিবর্তিত হতে পারে।
নিচে এই ফাংশনগুলোর ব্যবহার এবং কাজের বিস্তারিত আলোচনা করা হলো:
malloc()
– মেমোরি বরাদ্দ করাmalloc()
(memory allocation) ফাংশনটি একটি নির্দিষ্ট আকারের মেমোরি ব্লক বরাদ্দ করতে ব্যবহৃত হয় এবং মেমোরির শুরুতে একটি পয়েন্টার রিটার্ন করে। তবে, এটি বরাদ্দ করা মেমোরি ব্লকটি অ্যানডিফাইনড মান (garbage values) দিয়ে পূর্ণ রাখে, অর্থাৎ এতে কোনো প্রাথমিক মান থাকে না।
void *malloc(size_t size);
size
– বরাদ্দ করতে চাওয়া মেমোরির আকার (বাইটে)।#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
// 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ
ptr = (int *)malloc(5 * sizeof(int));
if (ptr == NULL) {
printf("Memory allocation failed.\n");
return 1; // মেমোরি বরাদ্দ ব্যর্থ
}
// বরাদ্দ করা মেমোরি ব্যবহার
for (int i = 0; i < 5; i++) {
ptr[i] = i + 1;
}
// আউটপুট
for (int i = 0; i < 5; i++) {
printf("%d ", ptr[i]);
}
// বরাদ্দকৃত মেমোরি মুক্ত করা
free(ptr);
return 0;
}
এখানে malloc()
ফাংশনটি 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ করেছে, এবং ptr
পয়েন্টার দ্বারা সেই মেমোরি অ্যাক্সেস করা হয়েছে।
calloc()
– মেমোরি বরাদ্দ এবং ইনিশিয়ালাইজেশনcalloc()
(contiguous allocation) ফাংশনটি মেমোরির একটি ব্লক বরাদ্দ করে এবং সেই মেমোরির প্রতিটি অংশকে শূন্য (0) দিয়ে পূর্ণ করে দেয়। এটি malloc()
এর মতো, তবে এটি মেমোরি বরাদ্দ করার পাশাপাশি বরাদ্দকৃত মেমোরি ইনিশিয়ালাইজও করে।
void *calloc(size_t num, size_t size);
num
– বরাদ্দ করতে চাওয়া এলিমেন্টের সংখ্যা।size
– প্রতিটি এলিমেন্টের আকার (বাইটে)।#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
// 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ এবং সবগুলোকে শূন্য দিয়ে পূর্ণ করা
ptr = (int *)calloc(5, sizeof(int));
if (ptr == NULL) {
printf("Memory allocation failed.\n");
return 1; // মেমোরি বরাদ্দ ব্যর্থ
}
// আউটপুট
for (int i = 0; i < 5; i++) {
printf("%d ", ptr[i]); // সবগুলো ভ্যালু হবে 0
}
// বরাদ্দকৃত মেমোরি মুক্ত করা
free(ptr);
return 0;
}
এখানে calloc()
ফাংশনটি 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ করেছে এবং সবগুলোকে 0 দিয়ে পূর্ণ করেছে।
realloc()
– মেমোরি আকার পরিবর্তন করাrealloc()
ফাংশনটি আগে বরাদ্দ করা মেমোরির আকার পরিবর্তন করতে ব্যবহৃত হয়। এর মাধ্যমে আপনি আগের মেমোরি ব্লকটির আকার বাড়াতে বা কমাতে পারেন, এবং যদি নতুন মেমোরি বরাদ্দ করা হয়, তাহলে এটি পুরানো ডেটা সংরক্ষণ করবে।
void *realloc(void *ptr, size_t new_size);
ptr
– মেমোরির আগের পয়েন্টার (যা malloc()
বা calloc()
এর মাধ্যমে বরাদ্দ করা হয়েছিল)।new_size
– নতুন মেমোরি আকার (বাইটে)।#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
// 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ
ptr = (int *)malloc(5 * sizeof(int));
if (ptr == NULL) {
printf("Memory allocation failed.\n");
return 1; // মেমোরি বরাদ্দ ব্যর্থ
}
// পুরানো মেমোরিতে মান ইনপুট
for (int i = 0; i < 5; i++) {
ptr[i] = i + 1;
}
// নতুন আকারের জন্য মেমোরি বরাদ্দ (10টি ইন্টিজারের জন্য)
ptr = (int *)realloc(ptr, 10 * sizeof(int));
if (ptr == NULL) {
printf("Memory reallocation failed.\n");
return 1; // মেমোরি আকার পরিবর্তন ব্যর্থ
}
// নতুন মেমোরি ব্লকে মান ইনপুট
for (int i = 5; i < 10; i++) {
ptr[i] = i + 1;
}
// আউটপুট
for (int i = 0; i < 10; i++) {
printf("%d ", ptr[i]);
}
// বরাদ্দকৃত মেমোরি মুক্ত করা
free(ptr);
return 0;
}
এখানে realloc()
ফাংশনটি মেমোরি আকার বাড়িয়ে 10টি ইন্টিজারের জন্য মেমোরি বরাদ্দ করেছে এবং আগের 5টি মানের সাথে নতুন 5টি মান যোগ করেছে।
ফাংশন | কাজ | সিঙ্কট্যাক্স |
---|---|---|
malloc() | একটি নির্দিষ্ট আকারের মেমোরি বরাদ্দ করে | void *malloc(size_t size); |
calloc() | একটি নির্দিষ্ট সংখ্যক এলিমেন্টের জন্য মেমোরি বরাদ্দ করে এবং সবগুলোকে 0 দিয়ে পূর্ণ করে | void *calloc(size_t num, size_t size); |
realloc() | পূর্বে বরাদ্দ করা মেমোরির আকার পরিবর্তন করে | void *realloc(void *ptr, size_t new_size); |
এই ফাংশনগুলো ডাইনামিক মেমোরি ম্যানেজমেন্টের জন্য ব্যবহৃত হয় এবং প্রোগ্রামারদের মেমোরির কার্যকর ব্যবস্থাপনা করতে সহায়ক। malloc()
এবং calloc()
মেমোরি বরাদ্দ করতে ব্যবহৃত হয়, যেখানে malloc()
যেকোনো মান দিয়ে বরাদ্দ করে এবং calloc()
সবকিছু 0 দিয়ে পূর্ণ করে। realloc()
মেমোরি আকার পরিবর্তন করতে ব্যবহৃত হয়।
common.read_more